@interface JMIotUtils : NSObject

#pragma mark - 用户操作

/**
 登出当前用户
 */
+ (void)logOut;

#pragma mark - 虚拟设备操作

/**
 根据产品密钥创建虚拟设备

 @param key 产品密钥
 @param completionHandler 创建完成后的回调，包含错误信息和设备信息
 */
+ (void)createVirtualDeviceWithProductKey:(NSString *)key completionHandler:(void (^)(NSError *error, NSDictionary *info))completionHandler;

/**
 根据密钥和设备名称绑定虚拟设备

 @param key 产品密钥
 @param name 设备名称
 @param completionHandler 绑定完成后的回调，包含错误信息和返回数据
 */
+ (void)bindVirtualDeviceWithKey:(NSString *)key deviceName:(NSString *)name completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 获取用户绑定的虚拟设备列表

 @param completionHandler 获取完成后的回调，包含错误信息和设备列表
 */
+ (void)loadVirtualDeviceListWithCompletionHandler:(void (^)(NSError *error, NSArray *list))completionHandler;

#pragma mark - 真实设备操作

/**
 根据产品密钥查询产品信息

 @param iotId 产品密钥
 @param completionHandler 查询完成后的回调，包含错误信息和产品信息
 */
+ (void)queryProductInfoWithIotID:(NSString *)iotId completionHandler:(void (^)(NSError *error, NSDictionary *info))completionHandler;

/**
 调用该接口根据产品ID（productId）获取产品Key（productKey）信息。

 @param productId 产品的ID
 @param completionHandler 查询完成后的回调，包含错误信息和产品信息
 */
+ (void)queryProductKeyWithProductId:(NSString *)productId completionHandler:(void (^)(NSError *error, NSDictionary *info))completionHandler;

/**
 获取用户绑定的设备列表

 @param completionHandler 获取完成后的回调，包含错误信息和设备列表
 */
+ (void)loadDeviceListWithCompletionHandler:(void (^)(NSError *error, NSArray *list))completionHandler;

/**
 获取用户所有绑定的设备列表(包含真实设备,虚拟设备,虚拟影子设备等)

 @param completionHandler 获取完成后的回调，包含错误信息和设备列表
 */
+ (void)loadAllDeviceListWithCompletionHandler:(void (^)(NSError *error, NSArray *list))completionHandler;

/**
 获取设备发现列表

 @param completionHandler 获取完成后的回调，包含错误信息和设备列表
 */
+ (void)getAllDeviceListWithCompletionHandler:(void (^)(NSError *error, NSArray *list))completionHandler;

/**
 获取支持配网的产品列表

 @param completionHandler 获取完成后的回调，包含错误信息和产品列表
 */
+ (void)getProductListWithCompletionHandler:(void (^)(NSError *error, NSArray *list))completionHandler;

/**
 获取物的属性

 @param iotId 设备ID
 @param completionHandler 获取完成后的回调，包含错误信息和设备属性数据
 */
+ (void)getDevicePropertiesWithIotId:(NSString *)iotId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 设置物的属性

 @param iotId 设备ID
 @param params 要设置的属性参数
 @param completionHandler 设置完成后的回调，包含错误信息和返回数据
 */
+ (void)setDevicePropertiesWithIotId:(NSString *)iotId params:(NSDictionary *)params completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 获取物的连接状态

 @param iotId 设备ID
 @param completionHandler 获取完成后的回调，包含错误信息和连接状态数据
 */
+ (void)getDeviceStatusWithIotId:(NSString *)iotId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 设置设备昵称

 @param name 新的昵称
 @param iotId 设备ID
 @param completionHandler 设置完成后的回调，包含错误信息和返回数据
 */
+ (void)setDeviceNickName:(NSString *)name withIotID:(NSString *)iotId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 绑定WIFI设备（设备通过WIFI方式进行通讯）

 @param key 产品密钥
 @param name 设备名称
 @param token 设备绑定所需的token
 @param completionHandler 绑定完成后的回调，包含错误信息和返回数据
 */
+ (void)bindWifiDeviceWithProductKey:(NSString *)key deviceName:(NSString *)name token:(NSString *)token completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 绑定GPRS设备（设备通过GPRS方式进行通讯）

 @param key 产品密钥
 @param name 设备名称
 @param completionHandler 绑定完成后的回调，包含错误信息和设备ID
 */
+ (void)bindGPRSDeviceWithProductKey:(NSString *)key deviceName:(NSString *)name completionHandler:(void (^)(NSError *error, NSString *iotId))completionHandler;

/**
 解绑用户和设备

 @param iotId 设备ID
 @param completionHandler 解绑完成后的回调，包含错误信息和返回数据
 */
+ (void)unbindWifiDeviceWithIotId:(NSString *)iotId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 解除分享/管理员解绑设备

 @param iotIdList 设备ID列表
 @param targetIdentityId 目标用户ID
 @param completionHandler 解绑完成后的回调，包含错误信息和返回数据
 */
+ (void)unbindByManagerWithIotIds:(NSArray *)iotIdList withIdentityId:(NSString *)targetIdentityId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 关联移动推送到某账号

 @param deviceId 设备ID
 @param completionHandler 关联完成后的回调，包含错误信息和返回数据
 */
+ (void)bindAPNSChannelWithDeviceId:(NSString *)deviceId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 取消关联移动推送到某账号

 @param deviceId 设备ID
 @param completionHandler 取消关联完成后的回调，包含错误信息和返回数据
 */
+ (void)unbindAPNSChannelWithDeviceId:(NSString *)deviceId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 生成分线的二维码

 @param iotIds 设备ID列表
 @param completionHandler 生成完成后的回调，包含错误信息和返回数据
 */
+ (void)generateShareQrCode:(NSArray *)iotIds completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 通过二维码绑定设备

 @param qrKey 二维码密钥
 @param completionHandler 绑定完成后的回调，包含错误信息和返回数据
 */
+ (void)scanBindShareQrCode:(NSString *)qrKey completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 根据设备获取绑定关系

 @param iotId 要查询的目标设备ID。设备ID，生活物联网平台为设备颁发的ID，设备的唯一标识符。
 @param completionHandler 绑定完成后的回调，包含错误信息和返回数据
 */
+ (void)listBindingByDev:(NSString *)iotId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 设备分享给指定的用户

 @param iotIdList 要查询的目标设备ID。设备ID，生活物联网平台为设备颁发的ID，设备的唯一标识符。
 @param completionHandler 绑定完成后的回调，包含错误信息和返回数据
 */
+ (void)shareDevicesAndScenes:(NSArray *)iotIdList target:(NSString *)identityId completionHandler:(void (^)(NSError *error, id data))completionHandler;

/**
 发送网络请求

 @param path 请求路径
 @param version API版本
 @param params 请求参数
 @param completionHandler 请求完成后的回调，包含错误信息和返回数据
 */
+ (void)requestWithPath:(NSString *)path version:(NSString *)version params:(NSDictionary *)params completionHandler:(void (^)(NSError *error, id data))completionHandler;

@end
